/**
 * @file         bsc_can_adapter_attr.h
 * @brief        CAN服务框架 ———— 适配器属性读写接口
 * @note         用户根据需要项目需要补充修改 bsc_can_adapter_attr.c 功能具体实现
 * @author       Jpz(puzhao.jin@hopechart.com, 靳普诏)
 * @data         2022-8-10
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2022-8-10   <td>1.0                   <td>Jpz             <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */

#ifndef _BSC_CAN_ADAPTER_ATTR_H_
#define _BSC_CAN_ADAPTER_ATTR_H_

#include "ofc/ofc_types.h"
#include "bsc_can_server/bsc_can_device.h"

#ifdef __cplusplus
extern "C" {
#endif


// ~~~~~~~~~~~~~~~~~~~ 属性ID定义 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 


/// 组件初始化设备阶段，组件通过(TBsCanAdapterAttrGet())获取CAN设备初始属性值
enum TBsCanAdapterAttrIdTag
{   
    kBsCanAdapterAttrIdBaud             = 0,    // 设备波特率, 数据类型 Int32. 参考值(250000, 500000, ...)
    kBsCanAdapterAttrIdAutoRecover      = 1,    // BusOff状态自恢复，数据类型 Bool. True: 设备BusOff异常后自动恢复工作; False: 设备BusOff异常后需要手动触发恢复
    kBsCanAdapterAttrIdDetect           = 2,    // 自动侦测波特率模式，数据类型 Bool. True: 设备打开后处于波特率侦测状态; False： 设备打开后处于数据收发状态 
};
typedef enum TBsCanAdapterAttrIdTag TBsCanAdapterAttrId;


// ~~~~~~~~~~~~~~~~~ 需要用户实现，组件内部调用 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/**
 * 设置适配器属性的接口  （组件向用户请求修改数据源，需要用户实现）
 * @param channel       < BSC_CAN_CHANNL_COUNT 通道号; >= BSC_CAN_CHANNL_COUNT 公共属性;
 * @param attr_id       属性ID
 * @param *attr_value   属性值
 * @return >= 0 成功
 *         < 0  失败
 */
Int32 TBsCanAdapterAttrSet(Byte channel, Int32 attr_id, const void *attr_value);


/**
 * 获取适配器属性的接口  （组件向用户请求获取，需要用户实现）
 * @param channel           < BSC_CAN_CHANNL_COUNT 通道号; >= BSC_CAN_CHANNL_COUNT 公共属性;
 * @param attr_id           属性ID
 * @param *ret_attr_value   属性返回值
 * @return >= 0 成功
 *         < 0  失败
 */
Int32 TBsCanAdapterAttrGet(Byte channel, Int32 attr_id, void *ret_attr_value);


#ifdef __cplusplus
} // extern "C" {
#endif


#endif // #ifndef _BSC_CAN_ADAPTER_H_

